package com.global.crypto.enums;

/**
 * 支持的非对称加密算法枚举
 * 包含常见的非对称加密/签名/密钥交换算法及其支持的密钥长度范围
 */
public enum AsymmetricAlgorithm {
    // RSA 非对称加密算法，支持密钥长度范围：1024 位到 4096 位
    RSA("RSA", 1024, 4096),

    // DSA 数字签名算法，支持密钥长度范围：512 位到 1024 位
    DSA("DSA", 512, 1024),

    // EC 椭圆曲线算法（通常用于加密或签名），支持密钥长度范围：160 位到 571 位
    EC("EC", 160, 571),

    // DH Diffie-Hellman 密钥交换算法，支持密钥长度范围：512 位到 4096 位
    DH("DH", 512, 4096),

    // ECDH 椭圆曲线 Diffie-Hellman 密钥交换算法，支持密钥长度范围：160 位到 571 位
    ECDH("ECDH", 160, 571),

    // ECDSA 椭圆曲线数字签名算法，支持密钥长度范围：160 位到 571 位
    ECDSA("ECDSA", 160, 571),

    // ElGamal 非对称加密算法，支持密钥长度范围：512 位到 4096 位
    ELGAMAL("ElGamal", 512, 4096);

    // 算法名称，如 "RSA"、"DSA" 等，通常与 Java 加密标准中的名称一致
    private final String name;

    // 该算法支持的最小密钥长度（单位：位）
    private final int minKeySize;

    // 该算法支持的最大密钥长度（单位：位）
    private final int maxKeySize;

    /**
     * 构造函数，初始化算法名称及其支持的密钥长度范围
     *
     * @param name       算法名称
     * @param minKeySize 最小密钥长度
     * @param maxKeySize 最大密钥长度
     */
    AsymmetricAlgorithm(String name, int minKeySize, int maxKeySize) {
        this.name = name;
        this.minKeySize = minKeySize;
        this.maxKeySize = maxKeySize;
    }

    /**
     * 获取算法的标准名称
     *
     * @return 算法名称，如 "RSA"
     */
    public String getName() {
        return name;
    }

    /**
     * 获取该算法支持的最小密钥长度
     *
     * @return 最小密钥位数
     */
    public int getMinKeySize() {
        return minKeySize;
    }

    /**
     * 获取该算法支持的最大密钥长度
     *
     * @return 最大密钥位数
     */
    public int getMaxKeySize() {
        return maxKeySize;
    }
}
